UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged

您所在的位置:网站首页 ue4 文字 UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged

UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged

#UE4文本编辑组件EditableText输入中文拼音的时候会触发OnTextChanged| 来源: 网络整理| 查看: 265

UE4中EditableText 组件,在PC端或者IOS端等输入中文的时候,会将中文拼音也同步输入到编辑框中

 组件会在每一次有输入的时候触发OnTextChanged事件

这个事件传递过来的参数是所输入的所有的字符,包括拼音。

我们监听这个函数一般有两个需求:

(1)实时统计输入的字符个数

(2)检测输入的字符是否达到最大值,如果达到最大值则进行截取

这个时候,就会有一个问题,比如上面的截图,我们真实输入的字符是 “你好” 这个两个字符,但我们通过这个事件的参数获取的字符串是 "你好shi'jie" 这9个字符。这个时候字符长度统计就和我们需求的不一致了,我们希望能够将当前输入的拼音从这个字符串中去除,统计其他字符串长度。

但是去除拼音这个操作,我们不太好控制,因为有时候我们输入的最终结果就是拼音,你不能不让人家输入吧。

我们希望的时候,在我们进行字符个数统计的时候,当前不是在输入拼音状态。

所以在接收到OnTextChanged事件的时候,只要可以判断当前不是输入拼音的状态,就可以放心大胆的去统计字符个数了,如果是输入拼音状态,则我们不进行任何操作即可。

那如何判断当前是输入拼音状态呢,我们通过调试源码发现,有一个函数 GetSelectedText() ,获取当前选中的字符串这个函数,如果当前是输入状态,则只有在输入拼音的时候会返回输入拼音的最有一个字母,其他时候是个空字符串。

所以我们可以以此作为当前是否正在输入拼音的判断,即当接收到OnTextChanged事件的时候,在这个事件的回调函数中进行判断,GetSelectedText()返回是否是一个空字符串,如果是空字符串我们就进行字符个数检测,如果不是空字符串,则不进行字符个数检测。

//事件回调 this->OnTextChanged.AddDynamic(this, &UMUEditableTextBox::RawTextChangedHandler); void UMUEditableTextBox::RawTextChangedHandler(const FText& InText) { //获取选中部分,如果选中不为空,说明正在输入拼音,则不触发字数检测 FString SelectedStr = MyEditableTextBlock->GetSelectedText().ToString(); if (SelectedStr.IsEmpty()) { FString InputStr = InText.ToString(); int32 MaxCount = FCString::IsPureAnsi(*InputStr) ? MaxAnsiCount : MaxCharCount; if (MaxCount > 0 && InputStr.Len() > MaxCount) { FString Sub = InputStr.Left(MaxCount); this->SetText(FText::FromString(Sub)); return; } } }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3